package com.itheima.common.util;

import io.jsonwebtoken.*;

import javax.crypto.spec.SecretKeySpec;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author：shenkunlin
 * @date： 2021/8/19 11:42
 * @Description：
 *  Jwt工具类
 *      令牌创建
 *      令牌解析->载荷,传输用户信息
 ***/
public class JwtUtil {

    //秘钥
    private static String key="MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY";

    /**
     * 创建令牌
     *    Map<String,Object>载荷
     */
    public static String create(Map<String,Object> dataMap){
        JwtBuilder builder = Jwts.builder();
        //设置秘钥
        builder.signWith(SignatureAlgorithm.HS512,key());
        //过期时间
        builder.setExpiration(new Date(System.currentTimeMillis()+3600000));
        builder.setIssuer("heimatoutiao");
        builder.setSubject("黑马头条身份令牌");
        builder.addClaims(dataMap);
        //创建令牌
        return builder.compact();
    }


    /***
     * 解析令牌
     */
    public static Map<String, Object> parse(String token){
        Jws<Claims> claimsJws = Jwts.parser()
                //设置秘钥-SecretKeySpec
                .setSigningKey(key())
                //解析令牌
                .parseClaimsJws(token);
        return claimsJws.getBody();
    }

    /***
     * 校验令牌
     */
    public static boolean verifyToken(String token){
        try {
            parse(token);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 创建秘钥
     *    AES
     */
    public static SecretKeySpec key(){
        return new SecretKeySpec(key.getBytes(),0,key.getBytes().length, "AES");
    }


    public static void main(String[] args) {
        Map<String,Object> dataMap = new HashMap<String,Object>();
        dataMap.put("userName","zhangsan");
        dataMap.put("age",22);
        dataMap.put("city","深圳");
        //创建令牌
        String token = create(dataMap);
        System.out.println(token);
        //解析令牌
        System.out.println(parse(token));
    }
}
